package com.example.myapplicationthirteen.receivers;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

/**
 * 普通广播接收器 - 按【传播方式】分类的广播实现
 * 
 * 核心特性：
 * 1. 异步执行：所有接收器同时接收，执行顺序不确定
 * 2. 无法截断：一旦发送，所有接收器都将收到
 * 3. 无法修改数据：接收器不能修改传递给后续接收器的数据
 * 4. 效率较高：不受其他接收器执行耗时的影响
 * 
 * 适用场景：
 * - 状态通知：如网络状态变化、电量变化等系统事件
 * - 无需交互的广播：不需要接收器之间协作或数据修改的场景
 * - 低优先级通知：不需要保证接收顺序的通知事件
 */
public class NormalBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = "NormalBroadcastReceiver";
    private final String receiverName;
    private OnBroadcastReceivedListener listener;

    /**
     * 广播接收监听器接口
     */
    public interface OnBroadcastReceivedListener {
        void onBroadcastReceived(String receiverName, String action, String data);
    }

    /**
     * 构造函数
     * @param name 接收器名称，用于标识不同的接收器实例
     */
    public NormalBroadcastReceiver(String name) {
        this.receiverName = name;
    }

    /**
     * 设置广播接收监听器
     * @param listener 监听器实例
     */
    public void setOnBroadcastReceivedListener(OnBroadcastReceivedListener listener) {
        this.listener = listener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            // 验证intent不为空
            if (intent == null) {
                Log.e(TAG, receiverName + " 收到空广播");
                return;
            }

            // 获取广播Action和数据
            String action = intent.getAction();
            String data = intent.getStringExtra("data");
            
            // 获取所有附加数据用于详细日志
            Bundle extras = intent.getExtras();
            StringBuilder extrasInfo = new StringBuilder();
            if (extras != null) {
                for (String key : extras.keySet()) {
                    extrasInfo.append(key).append("=")
                            .append(extras.get(key)).append(", ");
                }
                if (extrasInfo.length() > 0) {
                    extrasInfo.setLength(extrasInfo.length() - 2); // 移除最后的逗号和空格
                }
            }

            // 详细日志记录
            Log.d(TAG, receiverName + " 收到普通广播: Action=" + action 
                    + ", 数据=" + data
                    + (extrasInfo.length() > 0 ? ", 所有参数: {" + extrasInfo + "}" : ""));

            // 通过监听器通知外部
            if (listener != null) {
                listener.onBroadcastReceived(receiverName, action, data);
            }

            // 普通广播无法截断，也无法修改传递的数据
            // 这里可以执行其他业务逻辑，如启动服务、更新UI等
            
        } catch (Exception e) {
            // 异常捕获，防止接收器崩溃导致应用问题
            Log.e(TAG, receiverName + " 处理广播时发生错误: " + e.getMessage(), e);
        }
    }
}